library(tidyverse)
library(httr)
library(R6)
library(magrittr)
library(data.table)
library(logger)
library(scales)
library(countrycode)
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGh0dHIpCmxpYnJhcnkoUjYpCmxpYnJhcnkobWFncml0dHIpCmxpYnJhcnkoZGF0YS50YWJsZSkKbGlicmFyeShsb2dnZXIpCmxpYnJhcnkoc2NhbGVzKQpsaWJyYXJ5KGNvdW50cnljb2RlKQpgYGAKCmBgYHtyfQojJyBEYXRhUHJvdmlkZXIKIycgIAojJyBAZGVzY3JpcHRpb24gQW4gUjYgY2xhc3MgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyBkYXRhIHRvIHRoZSBhcHBsaWNhdGlvbi4KIycgCiMnIEFQSSBVc2FnZToKIycgCiMnICInR0VUIC8nOiAgIEF0dHJpYnV0aW9uIGFuZCBpbnN0cnVjdGlvbnMgb2Ygd2hhdCBVUkwgcGF0aHMgYW5kIHF1ZXJpZXMgYXJlIGF2YWlsYWJsZSwgYWxvbmcgd2l0aCBhIGRlc2NyaXB0aW9uIG9mIGVhY2guIiwgCiMnICInR0VUIC9kYXRhc2V0cy8nOiAgIE1ldGFkYXRhIG9mIGVhY2ggZGF0YXNldCwgaW5jbHVkaW5nIHNwcmVhZHNoZWV0ICprZXkqLCAqaW5kaWNhdG9yTmFtZSosICpjYXRlZ29yeSogYW5kICpzdWJjYXRlZ29yeSogdGhlIGRhdGFzZXQgYmVsb25ncyB0bywgYW5kIHRoZSAqZGF0YXByb3ZpZGVyKiBhbmQgdGhlICpkYXRhcHJvdmlkZXJfbGluayouIiwgCiMnICInR0VUIC9kYXRhc2V0cy9jYXRlZ29yaWVzLyc6ICAgU2hvd3MgYSBjb3VudCBvZiBob3cgbWFueSBkYXRhc2V0cyBiZWxvbmcgdG8gZWFjaCBjYXRlZ29yeSBhbmQgc3ViY2F0ZWdvcnkuIiwgCiMnICInR0VUIC9kYXRhc2V0cy9jYXRlZ29yaXplZC8nOiAgIFNob3dzIHdoaWNoIGRhdGFzZXRzIGJlbG9uZyB0byBlYWNoIGNhdGVnb3J5IGFuZCBzdWJjYXRlZ29yeS4iLCAKIycgIidHRVQgL2RhdGEvaGVscC8/a2V5PWtleSc6ICAgU2hvd3Mgd2hpY2ggY291bnRyaWVzIGFuZCB5ZWFycyBhcmUgYXZhaWxhYmxlIGluIHRoZSBzcGVjaWZpZWQgZGF0YXNldC4iLCAKIycgIidHRVQgL2RhdGEvP2tleT1rZXkmY291bnRyeT1jb3VudHJ5JnllYXI9eWVhcic6ICAgR2V0cyB0aGUgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgY291bnRyeSBhbmQgeWVhciBpbiB0aGUgZGF0YXNldC4iLCAKIycgIidHRVQgL2RhdGEvP2tleT1rZXkmY291bnRyeT1jb3VudHJ5JzogICBHZXRzIHRoZSB2YWx1ZXMgZm9yIGVhY2ggYXZhaWxhYmxlIHllYXIgaW4gdGhlIGRhdGFzZXQsIGZvciB0aGUgc3BlY2lmaWVkIGNvdW50cnkuIiwgCiMnICInR0VUIC9kYXRhLz9rZXk9a2V5JnllYXI9eWVhcic6ICAgR2V0cyB0aGUgdmFsdWVzIGZvciBlYWNoIGF2YWlsYWJsZSBjb3VudHJ5IGluIHRoZSBkYXRhc2V0LCBmb3IgdGhlIHNwZWNpZmllZCB5ZWFyLiIsIAojJyAiJ0dFVCAvZGF0YS8/a2V5PWtleSc6ICAgRG93bmxvYWRzIHRoZSBDU1YgZmlsZSBvZiB0aGUgd2hvbGUgZGF0YXNldC4iCiMnCiMnIEBkb2NUeXBlIGNsYXNzCiMnIEBpbXBvcnRGcm9tIHRpYmJsZSBhc190aWJibGUKIycgQGltcG9ydEZyb20gbWFncml0dHIgYCU+JWAKIycgQGltcG9ydEZyb20gZGF0YS50YWJsZSByYmluZGxpc3QKIycgQGltcG9ydEZyb20gbG9nZ2VyIGxvZ19pbmZvCiMnIEBpbXBvcnRGcm9tIGh0dHIgR0VUIGNvbnRlbnQKIycgQGltcG9ydEZyb20gUjYgUjZDbGFzcwojJwojJyBAcmV0dXJuIERhdGFQcm92aWRlciBvYmplY3QKIycKIycgQGV4cG9ydAoKZGRmX3Byb3ZpZGVyIDwtIFI2Q2xhc3MoCiAgIkRkZlByb3ZpZGVyIiwKICBwdWJsaWMgPSBsaXN0KAogICAgcmVwb3MgPSBOVUxMLAogICAgaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKG9yZyA9ICJvcGVuLW51bWJlcnMiLCBsb2dfbGV2ZWwgPSBJTkZPKSB7CiAgICAgIGxvZ190aHJlc2hvbGQobG9nX2xldmVsLCBuYW1lc3BhY2UgPSAiZGRmX3Byb3ZpZGVyIikKICAgICAgcHJpdmF0ZSQub3JnID0gb3JnCiAgICAgIHNlbGYkcmVwb3MgPSBwcml2YXRlJC5jYWxsX2FwaShzcHJpbnRmKCJvcmdzLyVzL3JlcG9zIiwgcHJpdmF0ZSQub3JnKSkkbmFtZQogICAgfSwKICAgIGdldF9hbGxfcmVwb3MgPSBmdW5jdGlvbihyZXBvcyA9IHNlbGYkcmVwb3MpIHsKICAgICAgbGFwcGx5KHJlcG9zLCBzZWxmJGdldF9yZXBvKSAlPiUgCiAgICAgICAgc2V0TmFtZXMocmVwb3MpICU+JQogICAgICAgIHJiaW5kbGlzdChpZGNvbCA9ICIiKQogICAgfSwKICAgIGdldF9yZXBvID0gZnVuY3Rpb24ocmVwbykgewogICAgICBlbmRwb2ludCA8LSBzcHJpbnRmKCJyZXBvcy8lcy8lcy9jb250ZW50cy8iLCBwcml2YXRlJC5vcmcsIHJlcG8pCiAgICAgIHByaXZhdGUkLmNhbGxfYXBpKGVuZHBvaW50KQogICAgfSwKICAgIHJlYWRfZGRmID0gZnVuY3Rpb24ocmVwbywgZGRmX3R5cGU9IiIsIGRvd25sb2FkX2FsbD1GQUxTRSkgewogICAgICByZXBvIDwtIHNlbGYkZ2V0X3JlcG8ocmVwbykKICAgICAgZGRmX3R5cGUgPC0gcGFzdGUwKCJkZGYtLSIsIGRkZl90eXBlKQogICAgICBkdCA8LSByZXBvW2dyZXBsKGRkZl90eXBlLCBuYW1lKSAmICFpcy5uYShkb3dubG9hZF91cmwpLCAuKG5hbWUsIGRvd25sb2FkX3VybCldCiAgICAgIGlmIChkb3dubG9hZF9hbGwpIHsKICAgICAgICBkdFssIGRhdGEgOj0gbGFwcGx5KGRvd25sb2FkX3VybCwgZnJlYWQpXQogICAgICAgIHJldHVybihkdFssIC4oZGF0YSwgbmFtZSwgZG93bmxvYWRfdXJsKV0pCiAgICAgIH0KICAgICAgZHQKICAgIH0KICApLAogIHByaXZhdGUgPSBsaXN0KAogICAgLmRlYnVnX2RhdGEgPSBzdHJ1Y3R1cmUobGlzdCgKICAgICAgbmFtZSA9IGMoIi5naXRpZ25vcmUiLCAiUkVBRE1FLm1kIiwgImRhdGFwYWNrYWdlLmpzb24iKSwKICAgICAgcGF0aCA9IGMoIi5naXRpZ25vcmUiLCAiUkVBRE1FLm1kIiwgImRhdGFwYWNrYWdlLmpzb24iKSwKICAgICAgc2hhID0gYygiMzE2NGEwODE2ZTNkMWY2YjZhNGE1OGI1MWJiN2UzOThiNTA1YTI1NSIsIAogICAgICAgICAgICAgICJmNzkyMWQxNDk0Njc2ZmY4Y2U3ZTY4MTc2NWZmNGFiNmIwOGQyZGFkIiwKICAgICAgICAgICAgICAiZWU1ZmI3NDY2MDRkM2Y0NDg1NzQ1NTQwYWU5NjliZjFkMTFiNDBjMCIpKSwKICAgICAgcm93Lm5hbWVzID0gYyhOQSwgLTNMKSwgY2xhc3MgPSBjKCJkYXRhLnRhYmxlIiwgImRhdGEuZnJhbWUiKSksCiAgICAub3JnID0gIiIsCiAgICAuYXBpX3VybCA9ICJodHRwczovL2FwaS5naXRodWIuY29tIiwKICAgIC5jYWxsX2FwaSA9IGZ1bmN0aW9uKGVuZHBvaW50LCBiYXNlX3VybD1wcml2YXRlJC5hcGlfdXJsLCBhc19kYXRhdGFibGU9VFJVRSwgZGVidWc9RkFMU0UpIHsKICAgICAgYXBpX2NhbGwgPC0gc3ByaW50ZigiJXMvJXMiLCBiYXNlX3VybCwgZW5kcG9pbnQpCiAgICAgIGxvZ19pbmZvKHNwcmludGYoIkNhbGxpbmcgQVBJIGF0OiAlcyIsIGFwaV9jYWxsKSkKICAgICAgaWYgKGlzVFJVRShkZWJ1ZykpIHsKICAgICAgICBsb2dfZGVidWcoIkVudGVyaW5nIGRlYnVnZ2luZyIpCiAgICAgICAgCiAgICAgIH0KICAgICAgcmVxIDwtIEdFVChhcGlfY2FsbCkKICAgICAgaWYgKHJlcSRzdGF0dXNfY29kZSA9PSAyMDApIHsKICAgICAgICBsb2dfaW5mbygiUmVxdWVzdCBzdWNjZXNzZnVsIikKICAgICAgICBjb250IDwtIGNvbnRlbnQocmVxKQogICAgICAgIGlmIChpc1RSVUUoYXNfZGF0YXRhYmxlKSkgewogICAgICAgICAgbG9nX2RlYnVnKCJSZXR1cm5pbmcgZGF0YS50YWJsZSIpCiAgICAgICAgICBwcml2YXRlJC5yZXNwb25zZV90b19kYXRhdGFibGUoY29udCkgICAgICAgICAgCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxvZ19kZWJ1ZygiUmV0dXJuaW5nIGh0dHI6OmNvbnRlbnQiKQogICAgICAgICAgY29udAogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBsb2dfZXJyb3IoIlJlcXVlc3QgdW5zdWNjZXNzZnVsLiBFcnJvciBDb2RlICVzIiwgcmVxJHN0YXR1c19jb2RlKQogICAgICAgIGxvZ19lcnJvcigiTWVzc2FnZTpcbiIsIHBhc3RlMChjb250ZW50KHJlcSksIGNvbGxhcHNlID0gIlxuIikpCiAgICAgIH0KICAgIH0sCiAgICAucmVzcG9uc2VfdG9fZGF0YXRhYmxlID0gZnVuY3Rpb24ocmVzcG9uc2UpIHsKICAgICAgbG9nX2luZm8oIkNhc3RpbmcgcmVzcG9uc2UgdG8gcm93LWJvdW5kIGRhdGEudGFibGUgKHdpdGggZmlsbD1UcnVlKSIpCiAgICAgIHJiaW5kbGlzdCgKICAgICAgICBsYXBwbHkocmVzcG9uc2UsIGZ1bmN0aW9uKHgpIHsKICAgICAgICAgIGFzLmRhdGEudGFibGUoCiAgICAgICAgICAgIHhbbGVuZ3Rocyh4KSA9PSAxXSwKICAgICAgICAgICAgbGFwcGx5KHhbbGVuZ3Rocyh4KSAhPSAxXSwgZnVuY3Rpb24oeCkge2xpc3QoYXMuZGF0YS50YWJsZSh4KSl9KQogICAgICAgICAgKQogICAgICAgIH0pLAogICAgICAgIGZpbGwgPSBUUlVFCiAgICAgIClbXQogICAgfQogICksCiAgYWN0aXZlPSBsaXN0KAogICAgb3JnID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgaWYgKG1pc3NpbmcodmFsdWUpKSB7CiAgICAgICAgcHJpdmF0ZSQub3JnCiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3RvcCgib3JnIGlzIHJlYWQtb25seS4iLCBjYWxsLiA9IEZBTFNFKQogICAgICB9CiAgICB9LAogICAgb3JnX3VybCA9IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgIGlmIChtaXNzaW5nKHZhbHVlKSkgewogICAgICAgIHNwcmludGYoIiVzL29yZ3MvJXMiLCBwcml2YXRlJC5hcGlfdXJsLCBwcml2YXRlJC5vcmcpCiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3RvcCgib3JnX3VybCBpcyByZWFkLW9ubHkuIiwgY2FsbC4gPSBGQUxTRSkKICAgICAgfQogICAgfSwKICAgIGFwaV91cmwgPSBmdW5jdGlvbih2YWx1ZSkgewogICAgICBpZiAobWlzc2luZyh2YWx1ZSkpIHsKICAgICAgICBwcml2YXRlJC5hcGlfdXJsCiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3RvcCgiZ2l0X3VybCBpcyByZWFkLW9ubHkuIiwgY2FsbC4gPSBGQUxTRSkKICAgICAgfQogICAgfQogICkKKQoKcHJvdmlkZXIgPC0gZGRmX3Byb3ZpZGVyJG5ldygpCnJlcG9fZGY8LSBwcm92aWRlciRnZXRfcmVwbyhwJHJlcG9zWzJdKQpkZGYgPC0gcHJvdmlkZXIkcmVhZF9kZGYocCRyZXBvc1syXSwgZGRmX3R5cGUgPSAiZGF0YSIsIGRvd25sb2FkX2FsbCA9IFRSVUUpCmRkZiRkYXRhCmRkZgogCmBgYAoKCmBgYHtyfQpjb24gPC0gcmVhZF9jb25jZXB0cyhkKQoKcmVhZF9kYXRhcG9pbnRzIDwtIGZ1bmN0aW9uKHJlcG8pIHsKICAKICBpc19kYXRhcG9pbnQgPC0gc3RhcnRzV2l0aChkJG5hbWUsICJkZGYtLWNvbmNlcHRzIikgJiAhaXMubmEoZCRkb3dubG9hZF91cmwpCiAgZGF0YV9wb2ludF9maWxlcyA8LSBkJGRvd25sb2FkX3VybFtpc19kYXRhcG9pbnRdCiAgZGQgPC0gbGFwcGx5KGRhdGFfcG9pbnRfZmlsZXMsIGZyZWFkKSAlPiUKICAgIHNldE5hbWVzKGRhdGFfcG9pbnRfZmlsZXMgJT4lIGJhc2VuYW1lKCkgJT4lIHRvb2xzOjpmaWxlX3BhdGhfc2Fuc19leHQoKSkKfQoKCgpsIDwtIHJlYWRfZGF0YXBvaW50cyhkKQoKZFtzdGFydHNXaXRoKG5hbWUsICJkZGYtLWRhdGFwb2ludHMiKSAmICFpcy5uYShkb3dubG9hZF91cmwpLCBkYXRhIDo9IGxhcHBseShkb3dubG9hZF91cmwsIGZyZWFkKSBdCmRbLCAuKG5hbWUsIGRhdGEpXSAgCmRbbmFtZSA9PSAiZGRmLS1kYXRhcG9pbnRzLS1wb3B1bGF0aW9uLS1ieS0tbWFpbl9yZWxpZ2lvbl8yMDA4LS15ZWFyLmNzdiIsIGRhdGFdCmQKZFssIF0KY29uCgpsJGBkZGYtLWRhdGFwb2ludHMtLXBvcHVsYXRpb24tLWJ5LS1jb3VudHJ5LS15ZWFyYCAlPiUKICBmaWx0ZXIoY291bnRyeSAlaW4lIHNhbXBsZShjb3VudHJ5LCAxMCkpICU+JQogIGdncGxvdCgpICsKICBnZW9tX2xpbmUoYWVzKHllYXIsIHBvcHVsYXRpb24sIGNvbG91cj1jb3VudHJ5KSkgKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSwgbi5icmVha3MgPSAgMTApCgoKdXJsIDwtICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vb3Blbi1udW1iZXJzL2RkZi0tZ2FwbWluZGVyLS1wb3B1bGF0aW9uL21hc3Rlci9kZGYtLWRhdGFwb2ludHMtLXBvcHVsYXRpb24tLWJ5LS1jb3VudHJ5LS15ZWFyLmNzdiIKZnJlYWQoKQpsJGBkZGYtLWRhdGFwb2ludHMtLXBvcHVsYXRpb24tLWJ5LS1jb3VudHJ5LS15ZWFyYFssIGNvdW50cnlfbmFtZSA6PSBjb3VudHJ5Y29kZShjb3VudHJ5LCBvcmlnaW49ImlzbzNjIiwgZGVzdGluYXRpb24gPSAiY291bnRyeS5uYW1lIildCmwkYGRkZi0tZGF0YXBvaW50cy0tcG9wdWxhdGlvbi0tYnktLWNvdW50cnktLXllYXJgW2NvdW50cnlfbmFtZSA9PSAiQ3lwcnVzIl0gJT4lCiAgZmlsdGVyKGNvdW50cnkgJWluJSBzYW1wbGUoY291bnRyeSwgMTApKSAlPiUKICBnZ3Bsb3QoKSArCiAgZ2VvbV9saW5lKGFlcyh5ZWFyLCBwb3B1bGF0aW9uLCBjb2xvdXI9Y291bnRyeV9uYW1lKSkgKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSwgbi5icmVha3MgPSAgMTApICsKICBndWlkZXMoY29sb3VyPWd1aWRlX2xlZ2VuZCh0aXRsZT0iQ291bnRyeSIpKSArCiAgdGhlbWVfYncoKQpjb24KCmBgYAoK